#define _CRT_SECURE_NO_WARNINGS

#include "BinaryTree.h"

//
//#include <time.h>
//#include <stdio.h>
//#include <stdlib.h>
//#include <assert.h>
//
//void CreateData(void)
//{
//	int i = 0;
//	FILE* pf = fopen("Data.txt", "w");
//	if (pf == NULL)
//	{
//		printf("File open failed.\n");
//		exit(1);
//	}
//	printf("\033[?25l");
//	for (i = 0; i < 10000000; i++)
//	{
//		//printf("\033[s");
//		//printf("%.5lf%%", i / 10000000.0 * 100);
//		//printf("\033[u");
//		fprintf(pf, "%d\n", rand());
//	}
//	fclose(pf);
//}
//
//void HeapAdjustDown(int* arr, int parent, int n)
//{
//	assert(arr);
//	if (n == 0)
//	{
//		printf("The heap is empty.\n");
//		return;
//	}
//	int child = parent * 2 + 1;
//	int temp = 0;
//	for (; child < n;)
//	{
//		if (child + 1 < n && arr[child + 1] < arr[child])
//		{
//			child++;
//		}
//		if (arr[parent] <= arr[child])
//		{
//			break;
//		}
//		temp = arr[child];
//		arr[child] = arr[parent];
//		arr[parent] = temp;
//
//		parent = child;
//		child = parent * 2 + 1;
//	}
//}
//
//
//
//int Compare(const void* x, const void* y)
//{
//	int a = *(int*)x;
//	int b = *(int*)y;
//	return a - b;
//}
//
//void TopK()
//{
//	FILE* pf = fopen("Data.txt", "r");
//	if (NULL == pf)
//	{
//		printf("File open failed.\n");
//		exit(2);
//	}
//	int k = 0, i = 0, temp = 0;
//	printf("\033[?25h");
//	printf("k = ");
//	scanf("%d", &k);
//	printf("\033[?25l");
//	int* arr = malloc(k * sizeof(int));
//	for (i = 0; i < k; i++)
//	{
//		fscanf(pf, "%d", &arr[i]);
//	}
//	for (i = (k - 1) / 2; i >= 0; i--)
//	{
//		HeapAdjustDown(arr, i, k);
//	}
//	for (i = 0; i < 10000000 - k; i++)
//	{
//		//printf("\033[s");
//		//printf("%.5lf%%", i * 1.0 / (10000000 - k) * 100);
//		//printf("\033[u");
//		fscanf(pf, "%d", &temp);
//		if (temp > arr[0])
//		{
//			arr[0] = temp;
//			HeapAdjustDown(arr, 0, k);
//		}
//	}
//	qsort(arr, k, sizeof(int), Compare);
//	for (i = 0; i < k; i++)
//	{
//		printf("%d\n", arr[i]);
//	}
//	fclose(pf);
//}
//
//int main()
//{
//	CreateData();
//	TopK();
//
//	return 0;
//}
//        A
//    B       C
//  D   N   E   F
// N N     N N N N
//
//前序 : A B D NULL NULL NULL C E NULL NULL F NULL NULL
//中序 : NULL D NULL B NULL A NULL E NULL C NULL F NULL
//后序 : NULL NULL D NULL B NULL NULL E NULL NULL F C A

void test()
{
	BTNode* A = BTCreateNode('A');
	BTNode* B = BTCreateNode('B');
	BTNode* C = BTCreateNode('C');
	BTNode* D = BTCreateNode('D');
	BTNode* E = BTCreateNode('E');
	BTNode* F = BTCreateNode('F');
	A->left = B;
	B->left = D;
	B->right = NULL;
	D->left = D->right = NULL;
	A->right = C;
	C->left = E;
	C->right = F;
	E->left = E->right = F->left = F->right = NULL;
	printf("前序 : ");
	BTPreOrder(A);
	printf("\n");
	// printf("中序 : ");
	// BTInOrder(A);
	// printf("\n");
	// printf("后序 : ");
	// BTPostOrder(A);
	// printf("\n");
}


int main()
{
	test();



	return 0;
}